/**
 * 
 */
package cn.ad.server.web.spring.model.adview;

/**
 * Asset Object对象
 * 对应请求中的素材要求。回应体必须包括对于素材的回应。
 * 每项asset只可以包括{title,img,video,data}的某一个类型，
 * 其他类型的字段必须不存在或为空。每项asset必须设置请求体对应的id，用于区分素材。
 * 
 * 关于素材 title, img, video, data, 根据请求返回其中一种。
 * @author Administrator
 */
public class RequestAsset {
	
	/**
	 * 不重复的素材id，对应请求体中的id
	 */
	private int id;
	
	/**
	 * 设置为 1 表示素材必需， 此时如果返回的广告缺少对应素材则 AdView 认为无效。缺省为 0
	 */
	private int required;
	
	/**
	 * 文本内容需求
	 */
	private Title title;
	
	/**
	 * 图片内容需求
	 */
	private Image img;
	
	/**
	 * 视频内容需求
	 */
	private Video video;
	
	/**
	 * 数据内容需求。
	 */
	private Data data;
	/**
	 * 扩展内容
	 */
	private Object ext;

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the required
	 */
	public int getRequired() {
		return required;
	}

	/**
	 * @param required the required to set
	 */
	public void setRequired(int required) {
		this.required = required;
	}

	/**
	 * @return the title
	 */
	public Title getTitle() {
		return title;
	}

	/**
	 * @param title the title to set
	 */
	public void setTitle(Title title) {
		this.title = title;
	}

	/**
	 * @return the img
	 */
	public Image getImg() {
		return img;
	}

	/**
	 * @param img the img to set
	 */
	public void setImg(Image img) {
		this.img = img;
	}

	/**
	 * @return the video
	 */
	public Video getVideo() {
		return video;
	}

	/**
	 * @param video the video to set
	 */
	public void setVideo(Video video) {
		this.video = video;
	}

	/**
	 * @return the data
	 */
	public Data getData() {
		return data;
	}

	/**
	 * @param data the data to set
	 */
	public void setData(Data data) {
		this.data = data;
	}

	/**
	 * @return the ext
	 */
	public Object getExt() {
		return ext;
	}

	/**
	 * @param ext the ext to set
	 */
	public void setExt(Object ext) {
		this.ext = ext;
	}
	
	/**
	 * 文本内容需求描述类
	 * @author Administrator
	 */
	private class Title{

		public Title() {
		}

		/**
		 * 最大文本长度， 0 不限制。
		 */
		private int len;
		
		/**
		 * 扩展内容
		 */
		private Object ext;

		/**
		 * @return the len
		 */
		public int getLen() {
			return len;
		}

		/**
		 * @param len the len to set
		 */
		public void setLen(int len) {
			this.len = len;
		}

		/**
		 * @return the ext
		 */
		public Object getExt() {
			return ext;
		}

		/**
		 * @param ext the ext to set
		 */
		public void setExt(Object ext) {
			this.ext = ext;
		}
	}
	
	/**
	 * 图片内容需求。
	 * @author Administrator
	 */
	public class Image{

		public Image() {
		}

		/**
		 * 图片类型
		 * 1 Icon Icon 图片
			2 Logo Logo 图片
			3 Main 广告大图
			500+ XXX 保留	
		 * @author Administrator
		 */

		/**
		 * 图片类型
		 */
		private int type;
		
		/**
		 * 图片宽度
		 */
		private int w;
		
		/**
		 * 最小宽度，如果只有 w，认为需要确切匹配宽度
		 */
		private int wmin;
		
		/**
		 * 图片高度
		 */
		private int h;
		
		/**
		 * 最小高度，如果只有 h，认为需要确切匹配高度
		 */
		private int hmin;
		
		/**
		 * 额外支持的图片格式。 默认支持["image/jpg","image/gif"]
		 */
		private String[] mimes;
		
		/**
		 * 扩展内容
		 */
		private Object ext;

		public int getType() {
			return type;
		}

		public void setType(int type) {
			this.type = type;
		}

		/**
		 * @return the w
		 */
		public int getW() {
			return w;
		}

		/**
		 * @param w the w to set
		 */
		public void setW(int w) {
			this.w = w;
		}

		/**
		 * @return the wmin
		 */
		public int getWmin() {
			return wmin;
		}

		/**
		 * @param wmin the wmin to set
		 */
		public void setWmin(int wmin) {
			this.wmin = wmin;
		}

		/**
		 * @return the h
		 */
		public int getH() {
			return h;
		}

		/**
		 * @param h the h to set
		 */
		public void setH(int h) {
			this.h = h;
		}

		/**
		 * @return the hmin
		 */
		public int getHmin() {
			return hmin;
		}

		/**
		 * @param hmin the hmin to set
		 */
		public void setHmin(int hmin) {
			this.hmin = hmin;
		}

		/**
		 * @return the mimes
		 */
		public String[] getMimes() {
			return mimes;
		}

		/**
		 * @param mimes the mimes to set
		 */
		public void setMimes(String[] mimes) {
			this.mimes = mimes;
		}

		/**
		 * @return the ext
		 */
		public Object getExt() {
			return ext;
		}

		/**
		 * @param ext the ext to set
		 */
		public void setExt(Object ext) {
			this.ext = ext;
		}
	}
	
	/**
	 * Video 需求对象
	 * @author Administrator
	 *
	 */
	public class Video{

		public Video() {
		}

		/**
		 * 支持的视频格式
		 * 例如：["video/xms-wmv"]
		 */
		private String[] mimes;
		
		/**
		 * 视频最短长度-秒数
		 */
		private int minduration;
		
		/**
		 * 视频最大长度-秒数
		 */
		private int maxduration;
		
		/**
		 * 支持的视频广告投放协议，见《 AdView 移动广告交易平台RTB 接口协议》 附录 6.12
		 */
		private int[] protocols;
		
		/**
		 * 扩展内容
		 */
		private Object ext;

		/**
		 * @return the mimes
		 */
		public String[] getMimes() {
			return mimes;
		}

		/**
		 * @param mimes the mimes to set
		 */
		public void setMimes(String[] mimes) {
			this.mimes = mimes;
		}

		/**
		 * @return the minduration
		 */
		public int getMinduration() {
			return minduration;
		}

		/**
		 * @param minduration the minduration to set
		 */
		public void setMinduration(int minduration) {
			this.minduration = minduration;
		}

		/**
		 * @return the maxduration
		 */
		public int getMaxduration() {
			return maxduration;
		}

		/**
		 * @param maxduration the maxduration to set
		 */
		public void setMaxduration(int maxduration) {
			this.maxduration = maxduration;
		}

		/**
		 * @return the protocols
		 */
		public int[] getProtocols() {
			return protocols;
		}

		/**
		 * @param protocols the protocols to set
		 */
		public void setProtocols(int[] protocols) {
			this.protocols = protocols;
		}

		/**
		 * @return the ext
		 */
		public Object getExt() {
			return ext;
		}

		/**
		 * @param ext the ext to set
		 */
		public void setExt(Object ext) {
			this.ext = ext;
		}
	}
	
	/**
	 * Data 需求对象
	 * @author Administrator
	 *
	 */
	public class Data{

		public Data() {
		}

		/**
		 * 需要的数据类型,参见《AdView移动广告交易平台RTB原生广告协议_V1.0》 附录5.3
		 */
		private int type;
		
		/**
		 * 返回的内容的最大文本长度。缺省认为没有限制
		 */
		private int len;
		
		/**
		 * 扩展内容
		 */
		private Object ext;

		/**
		 * @return the type
		 */
		public int getType() {
			return type;
		}

		/**
		 * @param type the type to set
		 */
		public void setType(int type) {
			this.type = type;
		}

		/**
		 * @return the len
		 */
		public int getLen() {
			return len;
		}

		/**
		 * @param len the len to set
		 */
		public void setLen(int len) {
			this.len = len;
		}

		/**
		 * @return the ext
		 */
		public Object getExt() {
			return ext;
		}

		/**
		 * @param ext the ext to set
		 */
		public void setExt(Object ext) {
			this.ext = ext;
		}
	}
}
